<!DOCTYPE html>
<html lang="en">
  <head>
    <title>
        Redis-1-安装、结构、命令、配置 - rulerLwx Blog
      </title>
        <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport"
      content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui">
    <meta name="renderer" content="webkit">
    <meta http-equiv="Cache-Control" content="no-transform" />
    <meta http-equiv="Cache-Control" content="no-siteapp" />
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="format-detection" content="telephone=no,email=no,adress=no">
    
    <meta name="theme-color" content="#000000" />
    
    <meta http-equiv="window-target" content="_top" />
    
    
    <meta name="description" content="NoSql 数据库模型 1）传统数据库模型 一对一，一对多，多对多，主键、外键等 2）NoSQL数据模型 BSON（Binary JSON）模型：是一种类JSO" />
    <meta name="generator" content="Hugo 0.73.0 with theme pure" />
    <title>Redis-1-安装、结构、命令、配置 - rulerLwx Blog</title>
    
    
    <link rel="stylesheet" href="https://rulerLwx.gitee.io/css/style.min.c4bc7071f132c964c2116bca53b392933f377e5ca7b7051ed245187c621a2d3e.css">
    
    <link rel="stylesheet" href="https://cdn.staticfile.org/highlight.js/9.15.10/styles/github.min.css" async>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.4.2/tocbot.css" async>
    <meta property="og:title" content="Redis-1-安装、结构、命令、配置" />
<meta property="og:description" content="NoSql 数据库模型 1）传统数据库模型 一对一，一对多，多对多，主键、外键等 2）NoSQL数据模型 BSON（Binary JSON）模型：是一种类JSO" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://rulerLwx.gitee.io/2020/07/redis-1-%E5%AE%89%E8%A3%85%E7%BB%93%E6%9E%84%E5%91%BD%E4%BB%A4%E9%85%8D%E7%BD%AE/" />
<meta property="article:published_time" content="2020-07-01T18:58:47+08:00" />
<meta property="article:modified_time" content="2020-07-01T18:58:47+08:00" />
<meta itemprop="name" content="Redis-1-安装、结构、命令、配置">
<meta itemprop="description" content="NoSql 数据库模型 1）传统数据库模型 一对一，一对多，多对多，主键、外键等 2）NoSQL数据模型 BSON（Binary JSON）模型：是一种类JSO">
<meta itemprop="datePublished" content="2020-07-01T18:58:47&#43;08:00" />
<meta itemprop="dateModified" content="2020-07-01T18:58:47&#43;08:00" />
<meta itemprop="wordCount" content="4475">



<meta itemprop="keywords" content="" /><meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Redis-1-安装、结构、命令、配置"/>
<meta name="twitter:description" content="NoSql 数据库模型 1）传统数据库模型 一对一，一对多，多对多，主键、外键等 2）NoSQL数据模型 BSON（Binary JSON）模型：是一种类JSO"/>

    <!--[if lte IE 9]>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/classlist/1.1.20170427/classList.min.js"></script>
      <![endif]-->

    <!--[if lt IE 9]>
        <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
        <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
      <![endif]-->
  </head>

  
  

  <body class="main-center theme-black" itemscope itemtype="http://schema.org/WebPage"><header class="header" itemscope itemtype="http://schema.org/WPHeader">
    <div class="slimContent">
      <div class="navbar-header">
        <div class="profile-block text-center">
          <a id="avatar" href="https://gitee.com/rulerLwx" target="_blank">
            <img class="img-circle img-rotate" src="https://rulerLwx.gitee.io/avatar.png" width="200" height="200">
          </a>
          <h2 id="name" class="hidden-xs hidden-sm">rulerLwx</h2>
          <h3 id="title" class="hidden-xs hidden-sm hidden-md">thinking...</h3>
          <small id="location" class="text-muted hidden-xs hidden-sm"><i class="icon icon-map-marker"></i>Guangzhou, China</small>
        </div><div class="search" id="search-form-wrap">
    <form class="search-form sidebar-form">
        <div class="input-group">
            <input type="text" class="search-form-input form-control" placeholder="Search" />
            <span class="input-group-btn">
                <button type="submit" class="search-form-submit btn btn-flat" onclick="return false;"><i
                        class="icon icon-search"></i></button>
            </span>
        </div>
        <div class="ins-search">
            <div class="ins-search-mask"></div>
            <div class="ins-search-container">
                <div class="ins-input-wrapper">
                    <input type="text" class="ins-search-input" placeholder="Type something..."
                        x-webkit-speech />
                    <button type="button" class="close ins-close ins-selectable" data-dismiss="modal"
                        aria-label="Close"><span aria-hidden="true">×</span></button>
                </div>
                <div class="ins-section-wrapper">
                    <div class="ins-section-container"></div>
                </div>
            </div>
        </div>
    </form>
</div>
        <button class="navbar-toggle collapsed" type="button" data-toggle="collapse" data-target="#main-navbar" aria-controls="main-navbar" aria-expanded="false">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
      </div>
      <nav id="main-navbar" class="collapse navbar-collapse" itemscope itemtype="http://schema.org/SiteNavigationElement" role="navigation">
        <ul class="nav navbar-nav main-nav">
            <li class="menu-item menu-item-home">
                <a href="/">
                    <i class="icon icon-home-fill"></i>
                  <span class="menu-title">Home</span>
                </a>
            </li>
            <li class="menu-item menu-item-archives">
                <a href="/posts/">
                    <i class="icon icon-archives-fill"></i>
                  <span class="menu-title">Archives</span>
                </a>
            </li>
            <li class="menu-item menu-item-categories">
                <a href="/categories/">
                    <i class="icon icon-folder"></i>
                  <span class="menu-title">Categories</span>
                </a>
            </li>
            <li class="menu-item menu-item-tags">
                <a href="/tags/">
                    <i class="icon icon-tags"></i>
                  <span class="menu-title">Tags</span>
                </a>
            </li>
            <li class="menu-item menu-item-about">
                <a href="/about/">
                    <i class="icon icon-cup-fill"></i>
                  <span class="menu-title">About</span>
                </a>
            </li>
        </ul>
      </nav>
    </div>
  </header>

<aside class="sidebar" itemscope itemtype="http://schema.org/WPSideBar">
  <div class="slimContent">
    
      <div class="widget">
    <h3 class="widget-title">Board</h3>
    <div class="widget-body">
        <div id="board">
            <div class="content">enjoy~
            </div>
        </div>
    </div>
</div>

      <div class="widget">
    <h3 class="widget-title"> Categories</h3>
    <div class="widget-body">
        <ul class="category-list">
            <li class="category-list-item"><a href="https://rulerLwx.gitee.io/categories/java-framework/" class="category-list-link">java-framework</a><span class="category-list-count">38</span></li>
            <li class="category-list-item"><a href="https://rulerLwx.gitee.io/categories/java-front-end/" class="category-list-link">java-front-end</a><span class="category-list-count">11</span></li>
            <li class="category-list-item"><a href="https://rulerLwx.gitee.io/categories/java-se/" class="category-list-link">java-se</a><span class="category-list-count">21</span></li>
            <li class="category-list-item"><a href="https://rulerLwx.gitee.io/categories/java-senior/" class="category-list-link">java-senior</a><span class="category-list-count">4</span></li>
            <li class="category-list-item"><a href="https://rulerLwx.gitee.io/categories/linux/" class="category-list-link">linux</a><span class="category-list-count">13</span></li>
            <li class="category-list-item"><a href="https://rulerLwx.gitee.io/categories/tools/" class="category-list-link">tools</a><span class="category-list-count">1</span></li>
            <li class="category-list-item"><a href="https://rulerLwx.gitee.io/categories/%E6%8A%80%E6%9C%AF%E6%9D%82%E7%83%A9/" class="category-list-link">技术杂烩</a><span class="category-list-count">4</span></li>
            <li class="category-list-item"><a href="https://rulerLwx.gitee.io/categories/%E6%95%B0%E6%8D%AE%E5%BA%93/" class="category-list-link">数据库</a><span class="category-list-count">15</span></li>
        </ul>
    </div>
</div>
      <div class="widget">
    <h3 class="widget-title"> Tags</h3>
    <div class="widget-body">
        <ul class="tag-list">
            
            
            <li class="tag-list-item"><a href="https://rulerLwx.gitee.io/tags/jvm/" class="tag-list-link">jvm</a><span
                    class="tag-list-count">1</span></li>
            
            
            <li class="tag-list-item"><a href="https://rulerLwx.gitee.io/tags/%E5%A4%9A%E7%BA%BF%E7%A8%8B/" class="tag-list-link">多线程</a><span
                    class="tag-list-count">2</span></li>
            
            
            <li class="tag-list-item"><a href="https://rulerLwx.gitee.io/tags/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/" class="tag-list-link">网络编程</a><span
                    class="tag-list-count">3</span></li>
            
        </ul>

    </div>
</div>
      
<div class="widget">
    <h3 class="widget-title">Recent Posts</h3>
    <div class="widget-body">
        <ul class="recent-post-list list-unstyled no-thumbnail">
            <li>
                <div class="item-inner">
                    <p class="item-title">
                        <a href="https://rulerLwx.gitee.io/2020/07/%E8%87%AA%E5%B7%B1%E5%8A%A8%E6%89%8B%E4%B8%80%E6%89%B9%E9%87%8F%E7%A7%BB%E5%8A%A8%E9%87%8D%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6/" class="title">自己动手（一）——批量移动、重命名文件</a>
                    </p>
                    <p class="item-date">
                        <time datetime="2020-07-27 17:50:02 &#43;0800 CST" itemprop="datePublished">2020-07-27</time>
                    </p>
                </div>
            </li>
            <li>
                <div class="item-inner">
                    <p class="item-title">
                        <a href="https://rulerLwx.gitee.io/2020/07/%E5%85%B3%E4%BA%8Einteger%E7%9A%84-128~127%E7%BC%93%E5%AD%98/" class="title">关于Integer的 -128~127缓存</a>
                    </p>
                    <p class="item-date">
                        <time datetime="2020-07-11 16:56:21 &#43;0800 CST" itemprop="datePublished">2020-07-11</time>
                    </p>
                </div>
            </li>
            <li>
                <div class="item-inner">
                    <p class="item-title">
                        <a href="https://rulerLwx.gitee.io/2020/07/%E8%B7%A8%E5%9F%9F%E9%97%AE%E9%A2%98/" class="title">跨域问题</a>
                    </p>
                    <p class="item-date">
                        <time datetime="2020-07-08 22:41:12 &#43;0800 CST" itemprop="datePublished">2020-07-08</time>
                    </p>
                </div>
            </li>
            <li>
                <div class="item-inner">
                    <p class="item-title">
                        <a href="https://rulerLwx.gitee.io/2020/07/%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/" class="title">个人博客搭建</a>
                    </p>
                    <p class="item-date">
                        <time datetime="2020-07-05 18:58:47 &#43;0800 CST" itemprop="datePublished">2020-07-05</time>
                    </p>
                </div>
            </li>
            <li>
                <div class="item-inner">
                    <p class="item-title">
                        <a href="https://rulerLwx.gitee.io/2020/07/centos/" class="title">CentOS-</a>
                    </p>
                    <p class="item-date">
                        <time datetime="2020-07-01 18:58:47 &#43;0800 CST" itemprop="datePublished">2020-07-01</time>
                    </p>
                </div>
            </li>
        </ul>
    </div>
</div>
  </div>
</aside>

    
    
<aside class="sidebar sidebar-toc collapse" id="collapseToc" itemscope itemtype="http://schema.org/WPSideBar">
  <div class="slimContent">
    <h4 class="toc-title">Catalogue</h4>
    <nav id="toc" class="js-toc toc">

    </nav>
  </div>
</aside>
<main class="main" role="main"><div class="content">
  <article id="-" class="article article-type-" itemscope
    itemtype="http://schema.org/BlogPosting">
    
    <div class="article-header">
      <h1 itemprop="name">
  <a
    class="article-title"
    href="/2020/07/redis-1-%E5%AE%89%E8%A3%85%E7%BB%93%E6%9E%84%E5%91%BD%E4%BB%A4%E9%85%8D%E7%BD%AE/"
    >Redis-1-安装、结构、命令、配置</a
  >
</h1>

      <div class="article-meta">
        
<span class="article-date">
  <i class="icon icon-calendar-check"></i>&nbsp;
<a href="https://rulerLwx.gitee.io/2020/07/redis-1-%E5%AE%89%E8%A3%85%E7%BB%93%E6%9E%84%E5%91%BD%E4%BB%A4%E9%85%8D%E7%BD%AE/" class="article-date">
  <time datetime="2020-07-01 18:58:47 &#43;0800 CST" itemprop="datePublished">2020-07-01</time>
</a>
</span>
<span class="article-category">
  <i class="icon icon-folder"></i>&nbsp;
  <a class="article-category-link" href="/categories/%E6%95%B0%E6%8D%AE%E5%BA%93/"> 数据库 </a>
</span>

        <span class="post-comment"><i class="icon icon-comment"></i>&nbsp;<a href="/2020/07/redis-1-%E5%AE%89%E8%A3%85%E7%BB%93%E6%9E%84%E5%91%BD%E4%BB%A4%E9%85%8D%E7%BD%AE/#comments"
            class="article-comment-link">Comments</a></span>
		<span class="post-wordcount hidden-xs" itemprop="wordCount">Word Count: 4475words</span>
		<span class="post-readcount hidden-xs" itemprop="timeRequired">Read Count: 9minutes </span>
      </div>
    </div>
    <div class="article-entry marked-body js-toc-content" itemprop="articleBody">
      <h1 id="nosql">NoSql</h1>
<h2 id="数据库模型">数据库模型</h2>
<p>1）传统数据库模型</p>
<p>一对一，一对多，多对多，主键、外键等</p>
<p>2）NoSQL数据模型</p>
<p>BSON（Binary JSON）模型：是一种类JSON的二进制的存储格式，支持内嵌的文档对象和数组对象。</p>
<p>理解成 JSON 即可。——20190916</p>
<p>3）两者对比</p>
<ul>
<li>高并发操作不太建议有关联查询</li>
<li>互联网公司用冗余数据来避免关联查询</li>
<li>分布式事务支持不了太多的并发</li>
</ul>
<p>NoSQL不需要像传统数据库那样 关联 查询，一个 JSON 就可以存储大量的不同类型的数据。——20190916</p>
<h2 id="四大分类">四大分类</h2>
<ul>
<li>K/V键值：Redis</li>
<li>文档型数据库（bson）：MongoDB、CouchDB</li>
<li>列储存数据库：HBase、Cassandra、分布式文件系统</li>
<li>图关系数据库：</li>
</ul>
<p>四者对比：</p>
<p><img src="https://gitee.com/leafsing/pic/raw/master/img/20200709090027.png" alt=""></p>
<h2 id="cap原理">CAP原理</h2>
<p>什么是CAP？</p>
<ul>
<li>C：Consistency，强一致性</li>
<li>A：Availability，可用性</li>
<li>P：Partition tolerance，分区容错性</li>
</ul>
<p>CAP的3选2：</p>
<p><img src="https://gitee.com/leafsing/pic/raw/master/img/20200709090101.png" alt=""></p>
<h2 id="分布式-vs-集群">分布式 VS 集群</h2>
<ul>
<li>分布式：不同的多台服务器上面部署<strong>不同的服务模块</strong>（工程），他们之间通过RPC/RMI通信和调用， 对外提供服务和组内协作。</li>
<li>集群  ：不同的多台服务器上面部署<strong>相同的服务模块</strong>，通过分布式调度软件进行统一的调度，对外提供服务和访问。</li>
</ul>
<h1 id="存储结构">存储结构</h1>
<p>Redis，Remote Dictionary Server，远程字典服务器。</p>
<p>Redis支持的键值数据类型：</p>
<ul>
<li>字符串 string</li>
<li>散列 hash</li>
<li>列表 list</li>
<li>集合 set</li>
<li>有序集合 zset</li>
</ul>
<h1 id="安装">安装</h1>
<h2 id="linux-生产环境-源码安装方式">linux-生产环境-源码安装方式</h2>
<p>注意：需要先安装 gcc</p>
<pre><code>$ wget http://download.redis.io/releases/redis-3.2.10.tar.gz
$ tar zxvf redis-3.2.10.tar.gz
$ cd redis-3.2.10
$ make

$ sudo make install     # 将redis-3.2.10/src下面的redis-cli、redis-server等复制到 /usr/local/bin/

$ sudo cp utils/redis_init_script /etc/init.d/redis_6379    # 将启动脚本复制到 /etc/init.d/，并改名为 redis_6379
$ sudo mkdir /etc/redis         # 创建文件夹，用于存放redis配置文件
$ sudo mkdir -p /var/redis/6379 # 创建文件夹，用于存放redis持久化文件
$ sudo cp redis.conf /etc/redis/6379.conf # 将配置文件模板复制到/etc/redis，并改名为6379.conf

$ vim /etc/redis/6379.conf      # 修改配置，设为以下值：
-----------------------------------------------------------------
1、在6379.conf的头部注释中（可以是最开始位置，或中间位置）添加两行配置：
# Comments to support chkconfig on RedHat Linux
# chkconfig:   2345 90 10
# description:  Redis is a persistent key-value database

2、
daemonize yes                       # 设为后台进程
pidfile /var/run/redis_6379.pid     # redis的PID文件位置
port 6379                           # redis监听端口号
dir /var/redis/6379                 # 持久化文件存放位置
-----------------------------------------------------------------

$ sudo chkconfig --add redis_6379
</code></pre>
<p>注意：配置开机自启时，要做三件事</p>
<ol>
<li>将启动脚本放在/etc/init.d目录下，脚本名称可以随意</li>
<li>在启动脚本头部注释中，增加两行RHT系列特有的注释</li>
<li>sudo chkconfig &ndash;add redis_6379 命令将脚本注册到开机启动入口中</li>
</ol>
<p>参考资料：</p>
<ul>
<li>[vLinux下chkconfig命令详解][1]</li>
<li>[service redis does not support chkconfig的解决办法][2]</li>
</ul>
<h3 id="各种配置">各种配置</h3>
<ul>
<li>开启远程访问</li>
</ul>
<p>类似“本机客户端连接虚拟机Redis服务”，修改redis.conf文件</p>
<p>1、绑定Redis所在服务器的IP</p>
<pre><code># bind 127.0.0.1
bind 192.168.12.132
</code></pre>
<p>2、关闭受保护模式</p>
<pre><code>protected-mode no
</code></pre>
<h3 id="启动服务端">启动服务端</h3>
<ul>
<li>上面安装时，已经将redis服务端配置为开机启动。</li>
<li>若需手动启动服务端，则执行：<code>redis-server</code>或<code>redis-server --port 6379</code>。</li>
<li>若需关闭服务端，则执行<code>redis-cli SHUTDOWN</code>。</li>
</ul>
<h3 id="启动客户端">启动客户端</h3>
<p>上面开机启动时，绑定了IP，因此启动客户端时，要连接上IP和端口，执行<code>redis-cli -h 192.168.12.132 -p 6379</code></p>
<h2 id="安装2linux">安装2（linux）</h2>
<ul>
<li>yum install gcc-c++ # 需要编译器环境</li>
<li>tar -zxf redis-3.0.0.tar.gz</li>
<li>cd redis-3.0.0</li>
<li>make</li>
<li>make PREFIX=/usr/local/redis install # 将Redis 安装到指定目录</li>
<li>cp redis.conf /usr/local/redis/bin # 先将redis.conf 文件拷贝到redis 的安装目录</li>
<li>编辑redis.conf 文件修改：daemonize yes</li>
<li>./redis-server redis.conf # 后台启动 redis</li>
</ul>
<p>参考尚学堂《Spring Data》之《Spring Data Redis》视频</p>
<h2 id="安装windows">安装（windows）</h2>
<p>客户端下载：https://github.com/MicrosoftArchive/redis/releases</p>
<p>以 Redis-x64-3.2.100 压缩包安装方式 为例，启动redis服务：</p>
<p><img src="https://gitee.com/leafsing/pic/raw/master/img/20200709090143.png" alt=""></p>
<p>redis中的文件（如redis-server redis-cli）是独立的文件，可以复制到任何地方单独启动，Linux下也一样</p>
<h1 id="卸载linux">卸载（Linux）</h1>
<p>卸载安装目录中的文件，如<code>/usr/local/bin</code>下的<code>redis-*</code>文件，如<code>rm -rf redis-*</code>。——20190913</p>
<h1 id="客户端常用命令">客户端常用命令</h1>
<p>可参考在线文档（API）：</p>
<ul>
<li><a href="http://doc.redisfans.com/">http://doc.redisfans.com/</a></li>
<li><a href="http://redisdoc.com/index.html">http://redisdoc.com/index.html</a></li>
</ul>
<h2 id="key">Key</h2>
<ul>
<li>redis&gt; keys *       # 查询所有的键值，，redis命令不区分大小写，keys 与 KEYS相同</li>
<li>redis&gt; keys string*          # 可以找出相同前缀的键</li>
<li>redis&gt; select 1     # 选择数据库</li>
<li>redis&gt; exists bar   # 键是否存在，1_是，0_否</li>
<li>redis&gt; del key [key &hellip;]    # 删除键</li>
<li>redis&gt; type foo     # 键的类型（string/hash/list/set/zset）</li>
</ul>
<p>文档大多命令来自《Redis入门指南（第2版）》——李子骅</p>
<h2 id="字符串string">字符串(string)</h2>
<pre><code class="language-sh">redis&gt; set foo 1    # 设置键及值

redis&gt; get foo      # 取值

redis&gt; incr num     # 数字递增

redis&gt; incrby num 2 # 每次递增2

redis&gt; decr num     # 数字递减

redis&gt; decrby num 2    # 数字递减，每次2

redis&gt; incrbyfloat key increment    # 增加指定浮点数

redis&gt; append key &quot; world&quot;      # 向尾部追加值

redis&gt; strlen key   # 返回键对应的值的长度

redis&gt; mget key [key ...]               # 同时获得多个值 mget/mset与set/get用法相同，只是可以获取/设置多个值

redis&gt; mset key value [,key value ...]  # 同时设置多个值
</code></pre>
<ul>
<li>getset key value，自动将key对应到value并且返回原来key对应的value</li>
<li>SETNX key value ，只在键 key 不存在的情况下， 将键 key 的值设置为 value 。若键 key 已经存在， 则 SETNX 命令不做任何动作。命令在设置成功时返回 1 ， 设置失败时返回 0 。</li>
</ul>
<h2 id="列表list">列表(list)</h2>
<p>双向队列（double linked list）。</p>
<p><img src="https://gitee.com/leafsing/pic/raw/master/img/20200709090227.png" alt=""></p>
<p><em>与key对应的是一个链表，链表具有索引</em>，一个列表类型键最多包含2^32-1个元素</p>
<pre><code class="language-sh">redis&gt; lpush key value [value ...]      # 向列表左边增加元素

redis&gt; rpush key value [value ...]      # 向列表右边增加元素

redis&gt; lpop key     # 弹出左边的元素，原理：1）将列表左边的元素移除，2）返回被移除的元素值

redis&gt; rpop key     # 弹出右边的元素

注：lpush和lpop或rpush和rpop配合，可以将列表当成栈；lpush和rrop或rpush和lpop配合，可以将列表当成队列。

redis&gt; llen key     # 列表中元素的个数

redis&gt; lrange key start stop  # 返回索引从start到stop之间的所有元素（包括两端元素），索引从0开始。
                              # 此方式跟`lrop`命令不同，不移除元素。
                              # 支持负索引，-1表示最右边的第一个元素，-2表示最右边的第二个元素，依次类推。
                              # 因此，`lrange key 0 -1`表示列表的所有元素 。

redis&gt; lrem key count value     # 删除列表中前count个值为value的元素。
                                # count &gt; 0，从列表左边开始删除前count个值为value的元素
                                # count &lt; 0，从列表右边开始删除前count个值为value的元素
                                # count = 0，删除列表中所有值为value的元素

redis&gt; lindex key index         # 获取指定索引的值,索引从0开始，支持负索引，-1表示最右边的第一个元素，依次类推。

redis&gt; lset key index value     # 设置指定索引值的键的值

注：列表可以存放相同key的元素，因此要指定key和index（key表示名为key的一个list，然后设置list中指定索引的值）


redis&gt; ltrim key start end      # 删除指定索引范围之外的所有元素（注：只删除指定key的的元素）

redis&gt; linsert key before|after pivot value     # 在（列表中）值为pivot元素的前或后插入value值

redis&gt; rpoplpush source destination     # rpop命令和lpush命令的组合，将元素从一个列表转到另一个列表中
</code></pre>
<h2 id="散列hash">散列(hash)</h2>
<p>散列存储的键（key)对应的值（value)是字段与字段值，其中字段值只能是字符串（即不支持类型嵌套），其它数据类型同理。</p>
<p><em>与key对应的是一个键值对（字段、字段值）</em>，一个散列类型键最多有2^32-1个字段。</p>
<pre><code>redis&gt; hset key field value

redis&gt; hget key field

redis&gt; hmset key field value [field value...]

redis&gt; hmget key field [field ...]

redis&gt; hgetall key      # 返回 key 指定的哈希集中所有的字段和值

redis&gt; hexists key field        # 判断键是否存在 

redis&gt; hsetnx key field value   # 当前字段不存在时赋值

redis&gt; hincby key field increment # 增加数字，注意：没有 hinc 命令

    &gt; hincby drinks amount 5    # 增加5
    &gt; hincby drinks amount -3   # 减少3

redis&gt; hdel key field [field ...]

redis&gt; hkeys key    # 只获取字段名

redis&gt; hvals key    # 只猎取字段值

redis&gt; hlen key     # 获取字段数量
</code></pre>
<p>自我总结：key 相当于 一个分类（文件夹），后面的 file:value 才是主角——20190427</p>
<h2 id="集合set">集合(set)</h2>
<p>集合(set)，无序，不可重复</p>
<pre><code class="language-sh">redis&gt; sadd key member [member ...]     # 增加一个元素，无则添加，有则忽略

redis&gt; srem key member [member ...]     # 删除一个元素，有则删除，无没忽略

redis&gt; smembers key     # 返回集合中的所有元素（key表示一个名为‘key’的集合）

redis&gt; sismember key member     # 判断元素是否在集合中

redis&gt; sdiff key [key ...]      # 集合间的差集运算，如sdiff a b， 表示所有属于a且不属性b的元素构成的集合

redis&gt; sinter key [key ...]      # 集合间交集运算，如sinter a b， 表示所有属于a且属于b的元素构成的集合

redis&gt; sunion key [key ...]      # 集合间并集运算，如sunion a b， 表示所有属于a或属于b的元素构成的集合（重复的元素算一个元素）

redis&gt; scard key        # 获取集合中元素个数

redis&gt; sdiffstore|sinterstore|sunionstore destination key [key ...]     # 进行集合运算并将结果存储

redis&gt; srandmember key [count]  # 从集合中随机获取集合中的元素，元素不从key中删除

redis&gt; spop key     # 从集合中随机弹出一个元素，元素从key中删除
</code></pre>
<h2 id="有序集合zset">有序集合(zset)</h2>
<p>在集合类型的基础上，有序集合为集合中的每个元素都关联了一个分数。</p>
<p>排序的时候是按分数排序。——20190913</p>
<pre><code class="language-sh">redis&gt; zadd key score member [score member]     # 增加元素，分数（score）可以是整数、双精度浮点数

redis&gt; zscore key member    # 获取元素的分数

redis&gt; zrange key start stop [withscores]       # 按元素分数从小到大顺序返回索引从start到stop之间的所有元素（包含两端）

redis&gt; zrevrange key start stop [withscores]    # 按元素分数从大一小顺序返回索引从start到stop之间的所有元素（包含两端）

redis&gt; zrangebyscore key min max [withscores]  [limit offset count] # 获取指定分数范围的元素(从小到大)

redis&gt; zrevrangebyscore key min max [withscores]  [limit offset count] # 获取指定分数范围的元素（从大到小）

redis&gt; zincrby key increment member     # 增加一个元素的分数（increment是要增加的数值）

redis&gt; zcard key    # 获得集合中元素的数量

redis&gt; zcount key min max   # 获得指定分数范围内的元素个数

redis&gt; zrem key member [member ...]     # 删除一个或多个元素

redis&gt; zremrangebyrank key start stop   # 按排名范围删除元素（分数从小到大） ？？？

redis&gt; zremrangbyscore key min max      # 按分数范围删除元素 ？？？

redis&gt; zrank key member         # 获取元素排名（分数小到大）

redis&gt; zrevrank key member      # 获取元素排名（分数大到小）

redis&gt; zinterstore destination numkeys key [key ...]  [weight weight  [weight ...]]  [aggrecate]

</code></pre>
<p>总结：set 和 zset 都是 set 。只不过 zset 多了 一个分数（在key和value之间添加一个分数），用于排序、区间划分。</p>
<h1 id="配置文件redisconf">配置文件（redis.conf）</h1>
<p>学习资料：</p>
<ul>
<li>《尚硅谷-Redis视频》</li>
</ul>
<h2 id="目录位置">目录位置</h2>
<p>执行<code>make</code>命令后，配置文件在<code>redis-5.0.5/redis.conf</code>，一般要将其复制到其它文件夹，而不是直接修改它。</p>
<p>redis.conf的配置文件分为以下几个大部分：</p>
<ul>
<li>INCLUDES：可以包含其它配置文件</li>
<li>MODULES</li>
<li>NETWORK</li>
<li>GENERAL：通用配置</li>
<li>SNAPSHOTTING：快照，持久化</li>
<li>REPLICATION：复制</li>
<li>SECURITY</li>
<li>CLIENTS</li>
<li>MEMORY MANAGEMENT</li>
<li>LAZY FREEING</li>
<li>APPEND ONLY MODE</li>
<li>LUA SCRIPTING</li>
<li>REDIS CLUSTER</li>
<li>SLOW LOG</li>
<li>ACTIVE DEFRAGMENTATION</li>
</ul>
<p><img src="https://gitee.com/leafsing/pic/raw/master/img/20200709090312.png" alt=""></p>
<h2 id="常用用配置">常用用配置</h2>
<p><code>k/kb/m/MB/g/BG</code> 单位大小写不敏感：<code>units are case insensitive so 1GB 1Gb 1gB are all the same.</code></p>
<p><code>port 6379</code>：</p>
<p><code>daemonize no</code>：是否以后台方式启动</p>
<p><code>bind 127.0.0.1</code>：只能本机访问。若要跨网络访问，配置成 0.0.0.0 （为安全，要配置密码登录）</p>
<p><code>pidfile /var/run/redis_6379.pid</code>：进程管道ID文件</p>
<p><code>tcp-backlog 511</code>：</p>
<p><img src="https://gitee.com/leafsing/pic/raw/master/img/20200709090349.png" alt=""></p>
<p><code>timeout 0</code>：</p>
<p><code>tcp-keepalive 300</code>：单位为秒，如果设置为0，则不会进行keepalive检测，建议设成60</p>
<p><code>loglevel notice</code>：</p>
<p><code>logfile &quot;&quot;</code>：</p>
<p><code>syslog-enabled no</code>：</p>
<p><code>syslog-ident redis</code>：</p>
<p><code>syslog-facility local0</code>：</p>
<p>RDB保存时间：</p>
<pre><code>save 900 1
save 300 10
save 60 10000
</code></pre>
<p><code>dir ./</code>：持久化文件存储位置，不建议是<code>./</code>，因为在不同的目录启动redis，存储文件就在不同目录。</p>
<p><code>appendonly no</code>：</p>
<p><code>appendfilename &quot;appendonly.aof&quot;</code>：</p>
<h2 id="通过redis-cli修改配置">通过<code>redis-cli</code>修改配置</h2>
<pre><code>127.0.0.1:6379&gt;config set requirepass 123456
</code></pre>

    </div>
    <div class="article-footer">
<blockquote class="mt-2x">
  <ul class="post-copyright list-unstyled">
    <li class="post-copyright-link hidden-xs">
      <strong>Permalink: </strong>
      <a href="https://rulerLwx.gitee.io/2020/07/redis-1-%E5%AE%89%E8%A3%85%E7%BB%93%E6%9E%84%E5%91%BD%E4%BB%A4%E9%85%8D%E7%BD%AE/" title="Redis-1-安装、结构、命令、配置" target="_blank" rel="external">https://rulerLwx.gitee.io/2020/07/redis-1-%E5%AE%89%E8%A3%85%E7%BB%93%E6%9E%84%E5%91%BD%E4%BB%A4%E9%85%8D%E7%BD%AE/</a>
    </li>
    <li class="post-copyright-license">
      <strong>License：</strong><a href="http://creativecommons.org/licenses/by/4.0/deed.zh" target="_blank" rel="external">CC BY 4.0 CN</a>
    </li>
  </ul>
</blockquote>

<div class="panel panel-default panel-badger">
  <div class="panel-body">
    <figure class="media">
      <div class="media-left">
        <a href="https://gitee.com/rulerLwx" target="_blank" class="img-burn thumb-sm visible-lg">
          <img src="https://rulerLwx.gitee.io/avatar.png" class="img-rounded w-full" alt="">
        </a>
      </div>
      <div class="media-body">
        <h3 class="media-heading"><a href="https://gitee.com/rulerLwx" target="_blank"><span class="text-dark">rulerLwx</span><small class="ml-1x">thinking...</small></a></h3>
        <div>Good Good Study, Day Day Up~</div>
      </div>
    </figure>
  </div>
</div>
    </div>
  </article>
<section id="comments">
    <div id="vcomments"></div>
</section>

</div><nav class="bar bar-footer clearfix" data-stick-bottom>
    <div class="bar-inner">
        <ul class="pager pull-left">
            <li class="prev">
                <a href="https://rulerLwx.gitee.io/2020/07/redis-2-%E8%BF%87%E6%9C%9F%E5%AE%89%E5%85%A8%E6%8E%92%E5%BA%8F%E6%B6%88%E6%81%AFqa/" title="Redis-2-过期、安全、排序、消息、QA"><i
                        class="icon icon-angle-left"
                        aria-hidden="true"></i><span>&nbsp;&nbsp;Older</span></a>
            </li>
            <li class="next">
                <a href="https://rulerLwx.gitee.io/2020/07/oracle-2-qa/"
                    title="Oracle-2-QA"><span>Newer&nbsp;&nbsp;</span><i
                        class="icon icon-angle-right" aria-hidden="true"></i></a>
            </li>
            
            <li class="toggle-toc">
                <a class="toggle-btn collapsed" data-toggle="collapse" href="#collapseToc" aria-expanded="false"
                    title="Catalogue" role="button">
                    <span>[&nbsp;</span><span>Catalogue</span>
                    <i class="text-collapsed icon icon-anchor"></i>
                    <i class="text-in icon icon-close"></i>
                    <span>]</span>
                </a>
            </li>
        </ul>
        <div class="bar-right">
            <div class="share-component" data-sites="weibo,qq,wechat"
                data-mobile-sites="weibo,qq,qzone"></div>
        </div>
    </div>
</nav>

</main><footer class="footer" itemscope itemtype="http://schema.org/WPFooter">
<ul class="social-links">
    <li><a href="https://gitee.com/rulerLwx" target="_blank" title="gitee" data-toggle=tooltip data-placement=top >
            <i class="icon icon-gitee"></i></a></li>
    <li><a href="https://github.com/wolf-lea" target="_blank" title="github" data-toggle=tooltip data-placement=top >
            <i class="icon icon-github"></i></a></li>
</ul>
  <div class="copyright">
    &copy;2020  -
    2020
    <div class="publishby">
        Theme by <a href="https://github.com/xiaoheiAh" target="_blank"> xiaoheiAh </a>base on<a href="https://github.com/xiaoheiAh/hugo-theme-pure" target="_blank"> pure</a>.
    </div>
  </div>
</footer>

<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_SVG"></script>
<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
            showMathMenu: false, //disables context menu
            tex2jax: {
            inlineMath: [ ['$','$'], ['\\(','\\)'] ]
           }
    });
</script>


<script src="https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.min.js"></script>
<script>
    window.jQuery || document.write('<script src="js/jquery.min.js"><\/script>')
</script>
<script type="text/javascript" src="https://cdn.staticfile.org/highlight.js/9.15.10/highlight.min.js"></script>
<script type="text/javascript" src="https://cdn.staticfile.org/highlight.js/9.15.10/languages/python.min.js" defer></script>
<script type="text/javascript" src="https://cdn.staticfile.org/highlight.js/9.15.10/languages/javascript.min.js" defer></script><script>
    hljs.configure({
        tabReplace: '    ', 
        classPrefix: ''     
        
    })
    hljs.initHighlightingOnLoad();
</script>
<script src="https://rulerLwx.gitee.io/js/application.min.bdeb64b910570b6c41badc6a05b7afb0c8ad9efd8525de3c7257d59e786326a3.js"></script>
<script src="https://rulerLwx.gitee.io/js/plugin.min.51ff8c7317566f82259170fa36e09c4493adc9b9378b427a01ad3f017ebac7dd.js"></script>

<script>
    (function (window) {
        var INSIGHT_CONFIG = {
            TRANSLATION: {
                POSTS: 'Posts',
                PAGES: 'Pages',
                CATEGORIES: 'Categories',
                TAGS: 'Tags',
                UNTITLED: '(Untitled)',
            },
            ROOT_URL: 'https:\/\/rulerLwx.gitee.io',
            CONTENT_URL: 'https:\/\/rulerLwx.gitee.io\/searchindex.json ',
        };
        window.INSIGHT_CONFIG = INSIGHT_CONFIG;
    })(window);
</script>
<script type="text/javascript" src="https://rulerLwx.gitee.io/js/insight.min.a343cd9a5a7698336b28ef3a7c16a3a1b1d2d5fb17dc8ed04022bbe08cc5459073a15bdafa3a8a58cdd56080784bdd69fa70b1ae8597565c799c57ed00f0e120.js" defer></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.4.2/tocbot.min.js"></script>
<script>
    tocbot.init({
        
        tocSelector: '.js-toc',
        
        contentSelector: '.js-toc-content',
        
        headingSelector: 'h1, h2, h3',
        
        hasInnerContainers: true,
    });
</script>

<script src="https://cdn1.lncld.net/static/js/3.0.4/av-min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/valine"></script>
<script type="text/javascript">
    var GUEST = ['nick', 'mail', 'link'];
    var meta = 'nick,mail';
    meta = meta.split(',').filter(function (item) {
        return GUEST.indexOf(item) > -1;
    });
    new Valine({
        el: '#vcomments',
        verify: null ,
        notify: null ,
        appId: 'IyAB0PSPRazTPDxitO1ddQ7O-gzGzoHsz',
        appKey: '5rBJTq4KidYF33eXwvRVhtEH',
        placeholder: 'enjoy~',
        avatar: 'mm',
        meta: meta,
        pageSize: '10' || 10,
        visitor: false 
});
</script>

  </body>
</html>
